Fix UnboundLocalError from length variable defined in a sibling block - #210
Open
Sanjays2402 wants to merge 1 commit into
Open
Fix UnboundLocalError from length variable defined in a sibling block#210Sanjays2402 wants to merge 1 commit into
Sanjays2402 wants to merge 1 commit into
Conversation
The create_variable_* helpers deduplicate generated assignments by name
alone, but the assignment is often emitted inside a conditional block.
minLength defines data_len under `if isinstance(data, str):`, so a
schema combining minLength with minItems made the minItems block reuse
data_len under `if data_is_list:`, where it was never assigned:
fastjsonschema.validate({"minItems": 1, "minLength": 1}, ["str"])
UnboundLocalError: local variable 'data_len' referenced before assignment
Track the block scope each generated variable was defined in and only
reuse it from an enclosing block, so a sibling block emits its own
assignment. Blocks merged by the indent optimizer share a scope, as they
share generated code.
Closes horejsek#157
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #157
create_variable_with_lengthand friends deduplicate by variable name only, but the assignment is emitted inside whatever conditional block is open.minLengthdefinesdata_lenunderif isinstance(data, str):, so a schema that also setsminItemsmade theminItemsblock reusedata_lenunderif data_is_list:, where it was never assigned —fastjsonschema.validate({"minItems": 1, "minLength": 1}, ["str"])raisedUnboundLocalError.Each generated variable now records the block scope it was defined in and is only reused from an enclosing block, so a sibling block emits its own assignment. Blocks merged by the indent optimizer share a scope since they share generated code. Added regression tests for the min and max pairs; both fail with the reported
UnboundLocalErrorwithout the fix.